home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / tcp_ip / jnos / psi110f / i8250.h < prev    next >
Text File  |  1994-06-15  |  8KB  |  209 lines

  1. /* Various I/O definitions specific to asynch I/O on the IBM PC */
  2. /*
  3.  * mods by G1EMM
  4.  */
  5. #ifndef _8250_H
  6. #define _8250_H
  7.  
  8. #ifndef _MBUF_H
  9. #include "mbuf.h"
  10. #endif
  11.  
  12. #ifndef _PROC_H
  13. #include "proc.h"
  14. #endif
  15.  
  16. #ifndef _IFACE_H
  17. #include "iface.h"
  18. #endif
  19.  
  20. /* Output pseudo-dma control structure */
  21. struct dma {
  22.     char *data;     /* current output pointer */
  23.     unsigned short cnt;     /* byte count remaining */
  24.     char flags;     /* transmitter active */
  25. };
  26.  
  27. /* Read fifo control structure */
  28. struct fifo {
  29.     char *buf;              /* Ring buffer */
  30.     unsigned bufsize;       /* Size of ring buffer */
  31.     char *wp;               /* Write pointer */
  32.     char *rp;               /* Read pointer */
  33.     unsigned short cnt;     /* count of characters in buffer */
  34.     unsigned short hiwat;   /* High water mark */
  35.     long overrun;           /* count of sw fifo buffer overruns */
  36. };
  37.  
  38. /* Asynch controller control block */
  39. struct asy {
  40.     struct iface *iface;
  41.     struct fifo fifo;
  42.     int trigchar;           /* Fifo trigger character */
  43.  
  44.     struct dma dma;
  45.     struct mbuf *sndq;      /* Transmit queue */
  46.  
  47.     struct proc *monitor;
  48.  
  49.     unsigned addr;          /* Base I/O address */
  50.     unsigned vec;           /* Interrupt vector */
  51.     long speed;             /* Line speed in bits per second */
  52.  
  53.     struct {                /* Previous configuration saved at startup */
  54.         INTERRUPT (*vec) __ARGS((void));
  55.                 /* Original interrupt vector [cs:pc] */
  56.         char mask;      /* 8259 mask */
  57.         char divh,divl; /* baud rate divisor */
  58.         char lcr;       /* line control reg */
  59.         char ier;       /* Interrupt enable register */
  60.         char iir;       /* Interrupt ID reg, fifo type */
  61.         char mcr;       /* modem control bits */
  62.         char msr;       /* modem status bits */
  63.         char dummy;
  64.     } save;
  65.  
  66.     struct proc *poller;    /* G8BPQ poll process */
  67.  
  68.     char is_16550a;         /* 16550A detected */
  69.     char msr;
  70.  
  71. /* These are used by NRS and chained vector changes */
  72.     char chain;    /* Do interrupt vector chaining */
  73.         char nrs_cts;   /* netrom flow control */
  74.         char blind;     /* flow-blind */
  75.  
  76. #define FOUND_DOWN      0x00
  77. #define FOUND_UP        0x01
  78. #define MOVED_DOWN      0x02
  79. #define MOVED_UP        0x03
  80. #define IGNORED         0x04
  81.     char dtr_usage;
  82.     char rts_usage;
  83.  
  84.     char cts_flow_control;
  85.     char rlsd_line_control; /* RLSD indicates physical layer up/down */
  86.  
  87.     long fifotimeouts;      /* hw fifo character timeout int's */
  88.     long rxints;            /* receive interrupts */
  89.     long txints;            /* transmit interrupts */
  90.     long rxchar;            /* Received characters */
  91.     long overrun;           /* Receiver hardware overrun errors */
  92.     long txchar;            /* Transmitted characters */
  93.     long rxhiwat;           /* High water mark on hardware rx fifo */
  94.     long msint_count;       /* Count of modem status interrupts */
  95.     long txto;              /* Count of TX interrupt timeouts */
  96. };
  97.  
  98. extern int Nasy;                /* Actual number of asynch lines */
  99. extern struct asy Asy[];
  100. extern char *arg_dtr_0[];
  101.  
  102. #define BAUDCLK 115200L         /* 1.8432 Mhz / 16 */
  103.  
  104. /* 8250 definitions */
  105. /* Control/status register offsets from base address */
  106. #define THR     0               /* Transmitter holding register */
  107. #define RBR     0               /* Receiver buffer register */
  108. #define DLL     0               /* Divisor latch LSB */
  109. #define DLM     1               /* Divisor latch MSB */
  110. #define IER     1               /* Interrupt enable register */
  111. #define IIR     2               /* Interrupt ident register */
  112. #define FCR     2               /* FIFO control register (16550A only) */
  113. #define LCR     3               /* Line control register */
  114. #define MCR     4               /* Modem control register */
  115. #define LSR     5               /* Line status register */
  116. #define MSR     6               /* Modem status register */
  117.  
  118. /* 8250 Line Control Register */
  119. #define LCR_5BITS       0x00    /* 5 bit words */
  120. #define LCR_6BITS       0x01    /* 6 bit words */
  121. #define LCR_7BITS       0x02    /* 7 bit words */
  122. #define LCR_8BITS       0x03    /* 8 bit words */
  123. #define LCR_BIT_MASK    0x03    /* mask of bit size */
  124. #define LCR_NSB         0x04    /* Number of stop bits */
  125. #define LCR_PEN         0x08    /* Parity enable */
  126. #define LCR_EPS         0x10    /* Even parity select */
  127. #define LCR_SP          0x20    /* Stick parity */
  128. #define LCR_SB          0x40    /* Set break */
  129. #define LCR_DLAB        0x80    /* Divisor Latch Access Bit */
  130.  
  131. /* 8250 Line Status Register */
  132. #define LSR_DR          0x01    /* Data ready */
  133. #define LSR_OE          0x02    /* Overrun error */
  134. #define LSR_PE          0x04    /* Parity error */
  135. #define LSR_FE          0x08    /* Framing error */
  136. #define LSR_BI          0x10    /* Break interrupt */
  137. #define LSR_THRE        0x20    /* Transmitter line holding register empty */
  138. #define LSR_TSRE        0x40    /* Transmitter shift register empty */
  139.  
  140. /* 8250 Interrupt Identification Register */
  141. #define IIR_IP          0x01    /* 0 if interrupt pending */
  142.  
  143. #define IIR_MSTAT       0x00    /* Modem status interrupt */
  144. #define IIR_THRE        0x02    /* Transmitter holding register empty int */
  145. #define IIR_RDA         0x04    /* Receiver data available interrupt */
  146. #define IIR_RLS         0x06    /* Receiver Line Status interrupt */
  147. #define IIR_ID_MASK     0x06    /* Mask for interrupt ID */
  148.  
  149. #define IIR_FIFO_TIMEOUT 0x08   /* FIFO timeout interrupt pending - 16550A */
  150. #define IIR_FIFO_ENABLED 0xc0   /* FIFO enabled (FCR0,1 = 1) - 16550A only */
  151.  
  152.  
  153. /* 8250 interrupt enable register bits */
  154. #define IER_DAV         0x01    /* Data available interrupt */
  155. #define IER_TxE         0x02    /* Tx buffer empty interrupt */
  156. #define IER_RLS         0x04    /* Receive line status interrupt */
  157. #define IER_MS          0x08    /* Modem status interrupt */
  158.  
  159. /* 8250 Modem control register */
  160. #define MCR_DTR         0x01    /* Data Terminal Ready */
  161. #define MCR_RTS         0x02    /* Request to Send */
  162. #define MCR_OUT1        0x04    /* Out 1 (not used) */
  163. #define MCR_OUT2        0x08    /* Master interrupt enable (actually OUT 2) */
  164. #define MCR_LOOP        0x10    /* Loopback test mode */
  165.  
  166. /* 8250 Modem Status Register */
  167. #define MSR_DCTS        0x01    /* Delta Clear-to-Send */
  168. #define MSR_DDSR        0x02    /* Delta Data Set Ready */
  169. #define MSR_TERI        0x04    /* Trailing edge ring indicator */
  170. #define MSR_DRLSD       0x08    /* Delta Rx Line Signal Detect */
  171. #define MSR_CTS         0x10    /* Clear to send */
  172. #define MSR_DSR         0x20    /* Data set ready */
  173. #define MSR_RI          0x40    /* Ring indicator */
  174. #define MSR_RLSD        0x80    /* Rx line signal detect */
  175.  
  176. /* 16550A FIFO control register values */
  177. #define FIFO_ENABLE     0x01    /* enable TX & RX fifo */
  178. #define FIFO_CLR_RX     0x02    /* clear RX fifo */
  179. #define FIFO_CLR_TX     0x04    /* clear TX fifo */
  180. #define FIFO_START_DMA  0x08    /* enable TXRDY/RXRDY pin DMA handshake */
  181. #define FIFO_SIZE_1     0x00    /* RX fifo trigger levels */
  182. #define FIFO_SIZE_4     0x40
  183. #define FIFO_SIZE_8     0x80
  184. #define FIFO_SIZE_14    0xC0
  185. #define FIFO_SIZE_MASK  0xC0
  186.  
  187. #define FIFO_SETUP  (FIFO_ENABLE|FIFO_CLR_RX|FIFO_CLR_TX)
  188. #define FIFO_SETUP1 (FIFO_SETUP|FIFO_SIZE_1)
  189. #define FIFO_SETUP4 (FIFO_SETUP|FIFO_SIZE_4)
  190. #define FIFO_SETUP8 (FIFO_SETUP|FIFO_SIZE_8)
  191. #define FIFO_SETUP14 (FIFO_SETUP|FIFO_SIZE_14)
  192.  
  193. #define OUTPUT_FIFO_SIZE    8       /* was 16 */
  194.  
  195. /* end g1emm mod */
  196.  
  197. /* In asyvec.asm: */
  198. INTERRUPT asy0vec __ARGS((void));
  199. INTERRUPT asy1vec __ARGS((void));
  200. INTERRUPT asy2vec __ARGS((void));
  201. INTERRUPT asy3vec __ARGS((void));
  202. INTERRUPT asy4vec __ARGS((void));
  203. INTERRUPT asy5vec __ARGS((void));
  204.  
  205. /* In I8250.c  */
  206. int carrier_detect __ARGS((int dev));
  207.  
  208. #endif  /* _8250_H */
  209.